package com.gitee.feizns;

import com.gitee.feizns.convert.ConvertUtils;
import lombok.NonNull;

import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * 字符串
 * @author feizns
 * @since 2019/6/9 0009
 */
public abstract class StringUtils {

    /**
     * 空白字符
     */
    public static final Character BLANK_CHARACTER = ' ';

    /**
     *
     */
    public static final String EMPTY_STRING = "";

    /**
     * 首字母大写
     * @param original
     * @return
     */
    public static final String firstUpper(String original) {
        return isEmpty(original) ? original : Character.toUpperCase(original.charAt(0)) + original.substring(1);
    }

    /**
     * 首字母小写
     * @param original
     * @return
     */
    public static final String firstLower(String original) {
        return isEmpty(original) ? original : Character.toLowerCase(original.charAt(0)) + original.substring(1);
    }

    /**
     * 是否为空
     * @param str
     * @return
     */
    public static final boolean isEmpty(String str) {
        return str == null || str.isEmpty();
    }

    /**
     * 全空白
     * @param str
     * @return
     */
    public static final boolean isEmptyOrBlank(String str) {
        return isEmpty(str) ? true : str.trim().isEmpty();
    }

    /**
     * 使用逗号分隔实现，数据转换
     * @param str
     * @return
     */
    public static int[] toIntArray(@NonNull String str) {
        return toIntStream(str).toArray();
    }

    /**
     * 使用逗号分隔
     * @param str
     * @return
     */
    public static IntStream toIntStream(@NonNull String str) {
        return toIntStream(",", str);
    }

    /**
     * 使用逗号分隔
     * @param str
     * @return
     */
    public static IntStream toIntStream(String delimiter, @NonNull String str) {
        String[] split = str.split(delimiter);
        return Arrays.stream(split)
                .map(original -> ConvertUtils.to(original, Integer.class))
                .filter(Objects::nonNull)
                .mapToInt(Integer::intValue);
    }

    /**
     * 将数组转换成用逗号分隔的字符串
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> String toString(@NonNull T... arr) {
        return toString(",", arr);
    }

    /**
     * 将数组转换成用逗号分隔的字符串
     * @param delimiter
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> String toString(String delimiter, @NonNull T... arr) {
        return Arrays.stream(arr)
                .filter(Objects::nonNull)
                .map(Objects::toString)
                .collect(Collectors.joining(delimiter));
    }

}
